// 主应用类
class AIDesktopManager {
    constructor() {
        this.files = [];
        this.applications = [];
        this.init();
    }

    // 初始化应用
    init() {
        this.bindEvents();
        this.updateCounts();
        console.log('AI桌面管理器已启动');
    }

    // 绑定事件
    bindEvents() {
        // 添加文件按钮
        const addFileBtn = document.getElementById('addFileBtn');
        if (addFileBtn) {
            addFileBtn.addEventListener('click', () => this.showAddFileDialog());
        }

        // 添加应用按钮
        const addAppBtn = document.getElementById('addAppBtn');
        if (addAppBtn) {
            addAppBtn.addEventListener('click', () => this.showAddAppDialog());
        }
    }

    // 显示添加文件弹窗
    showAddFileDialog() {
        Dialog.open({
            title: '添加文件',
            content: `
                <div style="padding: 10px 0;">
                    <div style="margin-bottom: 15px;">
                        <label style="display: block; margin-bottom: 5px; font-weight: 500;">文件名称：</label>
                        <input type="text" id="fileName" placeholder="请输入文件名称" 
                               style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px;">
                    </div>
                    <div style="margin-bottom: 15px;">
                        <label style="display: block; margin-bottom: 5px; font-weight: 500;">选择文件：</label>
                        <input type="file" id="fileInput" 
                               style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px;">
                    </div>
                    <div style="font-size: 12px; color: #666; line-height: 1.4;">
                        <i class="fas fa-info-circle"></i> 
                        支持所有类型的文件，将会记录文件路径以便快速访问
                    </div>
                </div>
            `,
            confirmText: '添加',
            cancelText: '取消',
            onConfirm: () => this.addFile()
        });
    }

    // 显示添加应用弹窗
    showAddAppDialog() {
        Dialog.open({
            title: '添加应用',
            content: `
                <div style="padding: 10px 0;">
                    <div style="margin-bottom: 15px;">
                        <label style="display: block; margin-bottom: 5px; font-weight: 500;">应用名称：</label>
                        <input type="text" id="appName" placeholder="请输入应用名称" 
                               style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px;">
                    </div>
                    <div style="margin-bottom: 15px;">
                        <label style="display: block; margin-bottom: 5px; font-weight: 500;">选择应用：</label>
                        <input type="file" id="appInput" accept=".exe,.app,.deb,.rpm,.dmg" 
                               style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px;">
                    </div>
                    <div style="font-size: 12px; color: #666; line-height: 1.4;">
                        <i class="fas fa-info-circle"></i> 
                        支持可执行文件（.exe、.app、.deb、.rpm、.dmg等）
                    </div>
                </div>
            `,
            confirmText: '添加',
            cancelText: '取消',
            onConfirm: () => this.addApplication()
        });
    }

    // 添加文件
    addFile() {
        const nameInput = document.getElementById('fileName');
        const fileInput = document.getElementById('fileInput');
        
        const name = nameInput ? nameInput.value.trim() : '';
        const file = fileInput ? fileInput.files[0] : null;

        if (!name) {
            Dialog.alert('请输入文件名称');
            return false; // 阻止弹窗关闭
        }

        if (!file) {
            Dialog.alert('请选择一个文件');
            return false; // 阻止弹窗关闭
        }

        // 创建文件对象
        const fileObj = {
            id: this.generateId(),
            name: name,
            path: file.path || file.name, // 在Electron中会有path属性
            type: this.getFileType(file.name),
            addTime: new Date().toISOString()
        };

        // 添加到文件列表
        this.files.push(fileObj);
        this.renderFiles();
        this.updateCounts();

        console.log('文件已添加:', fileObj);
        this.showSuccessMessage('文件添加成功！');
        return true; // 允许弹窗关闭
    }

    // 添加应用
    addApplication() {
        const nameInput = document.getElementById('appName');
        const appInput = document.getElementById('appInput');
        
        const name = nameInput ? nameInput.value.trim() : '';
        const app = appInput ? appInput.files[0] : null;

        if (!name) {
            Dialog.alert('请输入应用名称');
            return false; // 阻止弹窗关闭
        }

        if (!app) {
            Dialog.alert('请选择一个应用文件');
            return false; // 阻止弹窗关闭
        }

        // 创建应用对象
        const appObj = {
            id: this.generateId(),
            name: name,
            path: app.path || app.name, // 在Electron中会有path属性
            icon: 'fas fa-desktop', // 默认图标
            addTime: new Date().toISOString()
        };

        // 添加到应用列表
        this.applications.push(appObj);
        this.renderApplications();
        this.updateCounts();

        console.log('应用已添加:', appObj);
        this.showSuccessMessage('应用添加成功！');
        return true; // 允许弹窗关闭
    }

    // 渲染文件列表
    renderFiles() {
        const fileList = document.getElementById('fileList');
        if (!fileList) return;

        if (this.files.length === 0) {
            fileList.innerHTML = `
                <div class="empty-state">
                    <i class="fas fa-folder-open"></i>
                    <p>暂无文件，点击右上角"添加文件"开始管理</p>
                </div>
            `;
            return;
        }

        fileList.innerHTML = this.files.map(file => `
            <div class="item-card" data-id="${file.id}" title="${file.path}">
                <div class="item-actions">
                    <span class="action-icon" onclick="app.removeFile('${file.id}')" title="删除">
                        <i class="fas fa-times"></i>
                    </span>
                </div>
                <div class="item-icon">
                    <i class="${this.getFileIcon(file.type)}"></i>
                </div>
                <div class="item-name">${file.name}</div>
                <div class="item-path">${file.path}</div>
            </div>
        `).join('');
    }

    // 渲染应用列表
    renderApplications() {
        const appList = document.getElementById('appList');
        if (!appList) return;

        if (this.applications.length === 0) {
            appList.innerHTML = `
                <div class="empty-state">
                    <i class="fas fa-th-large"></i>
                    <p>暂无应用，点击右上角"添加应用"开始管理</p>
                </div>
            `;
            return;
        }

        appList.innerHTML = this.applications.map(app => `
            <div class="item-card" data-id="${app.id}" title="${app.path}">
                <div class="item-actions">
                    <span class="action-icon" onclick="app.removeApplication('${app.id}')" title="删除">
                        <i class="fas fa-times"></i>
                    </span>
                </div>
                <div class="item-icon">
                    <i class="${app.icon}"></i>
                </div>
                <div class="item-name">${app.name}</div>
                <div class="item-path">${app.path}</div>
            </div>
        `).join('');
    }

    // 删除文件
    removeFile(fileId) {
        const file = this.files.find(f => f.id === fileId);
        if (!file) return;

        Dialog.confirm(
            `确定要删除文件"${file.name}"吗？<br><br>
             <div style="margin: 10px 0; padding: 10px; background: #f8f9fa; border-radius: 4px; font-size: 12px;">
                <input type="radio" id="deleteRecord" name="deleteType" value="record" checked>
                <label for="deleteRecord" style="margin-left: 5px;">只删除记录</label><br>
                <input type="radio" id="deleteFile" name="deleteType" value="file" style="margin-top: 8px;">
                <label for="deleteFile" style="margin-left: 5px;">删除记录并删除本地文件</label>
             </div>`,
            () => {
                const deleteType = document.querySelector('input[name="deleteType"]:checked')?.value || 'record';
                
                // 从数组中移除
                this.files = this.files.filter(f => f.id !== fileId);
                this.renderFiles();
                this.updateCounts();

                if (deleteType === 'file') {
                    // 这里在Electron环境中可以实际删除文件
                    console.log('删除本地文件:', file.path);
                    this.showSuccessMessage('文件记录和本地文件已删除！');
                } else {
                    this.showSuccessMessage('文件记录已删除！');
                }
            }
        );
    }

    // 删除应用
    removeApplication(appId) {
        const app = this.applications.find(a => a.id === appId);
        if (!app) return;

        Dialog.confirm(
            `确定要删除应用"${app.name}"吗？`,
            () => {
                this.applications = this.applications.filter(a => a.id !== appId);
                this.renderApplications();
                this.updateCounts();
                this.showSuccessMessage('应用已删除！');
            }
        );
    }

    // 更新计数
    updateCounts() {
        const fileCount = document.getElementById('fileCount');
        const appCount = document.getElementById('appCount');
        
        if (fileCount) fileCount.textContent = this.files.length;
        if (appCount) appCount.textContent = this.applications.length;
    }

    // 生成唯一ID
    generateId() {
        return 'id_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
    }

    // 获取文件类型
    getFileType(filename) {
        const ext = filename.split('.').pop().toLowerCase();
        return ext || 'unknown';
    }

    // 获取文件图标
    getFileIcon(type) {
        const iconMap = {
            'pdf': 'fas fa-file-pdf',
            'doc': 'fas fa-file-word',
            'docx': 'fas fa-file-word',
            'xls': 'fas fa-file-excel',
            'xlsx': 'fas fa-file-excel',
            'ppt': 'fas fa-file-powerpoint',
            'pptx': 'fas fa-file-powerpoint',
            'txt': 'fas fa-file-alt',
            'jpg': 'fas fa-file-image',
            'jpeg': 'fas fa-file-image',
            'png': 'fas fa-file-image',
            'gif': 'fas fa-file-image',
            'mp4': 'fas fa-file-video',
            'avi': 'fas fa-file-video',
            'mp3': 'fas fa-file-audio',
            'wav': 'fas fa-file-audio',
            'zip': 'fas fa-file-archive',
            'rar': 'fas fa-file-archive',
            'js': 'fas fa-file-code',
            'html': 'fas fa-file-code',
            'css': 'fas fa-file-code',
            'py': 'fas fa-file-code'
        };
        return iconMap[type] || 'fas fa-file';
    }

    // 显示成功消息
    showSuccessMessage(message) {
        // 简单的成功提示，可以替换为更好的通知组件
        Dialog.alert(message);
    }
}

// 初始化应用
const app = new AIDesktopManager();
